
package carmadness.model;

/**
 * Forgalmi jelzőlámpát megvalósító osztály.
 * 
 * @author Tomi
 * @version 1.0
 * @created 10-Apr-2010 2:32:43 PM
 */
public class TrafficLight extends Rule
{
	/**
	 * A lámpa állapotát jelzi (true, ha zöld, false, ha piros).
	 */
	private boolean green = false;

	private final int defaultTicksToToggle = 10;
	/**
	 * Hány órajelig marad azonos állapoban a lámpa.
	 */
	private int ticksToToggle = defaultTicksToToggle;

	/**
	 * A Visitor minta szerinti accept metódus.
	 * 
	 * @param visitor
	 *            Egy IRuleVisitor interfészt megvalósító objektum.
	 */
	public void accept( IRuleVisitor visitor )
	{
		visitor.visitRule( this );
	}

	/**
	 * Visszatér a green attribútum értékével.
	 */
	public float getFactor()
	{
		return green ? 2f : 0.25f;
	}

	/**
	 * Visszatér a green attribútum értékével.
	 */
	public boolean isGreen()
	{
		return green;
	}

	public void step()
	{
		--ticksToToggle;
		if ( ticksToToggle == 0 )
		{
			toggle();
			ticksToToggle = defaultTicksToToggle;
		}
	}

	/**
	 * A lámpa állapotát az ellenkezőjére állítja.
	 */
	public void toggle()
	{
		green = !green;
	}

	/**
	 * Get ticksToToggle.
	 * 
	 * @return ticksToToggle as int.
	 */
	public int getTicksToToggle()
	{
		return ticksToToggle;
	}

	/**
	 * Set ticksToToggle.
	 * 
	 * @param ticksToToggle
	 *            the value to set.
	 */
	public void setTicksToToggle( int ticksToToggle )
	{
		this.ticksToToggle = ticksToToggle;
	}
}
